package com.mall.order.biz.handler;

import com.mall.order.biz.context.CreateOrderContext;
import com.mall.order.biz.context.TransHandlerContext;
import com.mall.order.mq.DelayOrderCancelProducer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;



/**
 * @Description: 利用mq发送延迟取消订单消息
 * 核心逻辑：
 * 1.获取生成的订单id
 * 2.发送一个包含订单id的延迟消息
 * @Date: 2019-09-17 23:14
 * @thingThought:
 * 1.涉及消息中间件：RocketMQ中的provider和consumer
 * 2.作为一个延迟消息的发送者（将核心逻辑代码外包给工具类并交由Spring容器管理，此处可以DI直接使用）
 * 3.同时，需要有一个consumer接收延迟消息并做出进一步的处理
 **/
@Component
@Slf4j
public class SendMessageHandler extends AbstractTransHandler {

	@Autowired
	DelayOrderCancelProducer producer;

	@Override
	public boolean isAsync() {
		return false;
	}

	@Override
	public boolean handle(TransHandlerContext context) {

		// 获取到生成的订单id,发送一个包含订单id的延迟消息
		CreateOrderContext c = (CreateOrderContext) context;
		String orderId = c.getOrderId();

		// 调用方法，发送消息
		producer.SendDelayOrderMessage(orderId);

		//0.获取存储数据信息的context（需要强制转化）
		CreateOrderContext contexts = (CreateOrderContext) context;
		//1.获取生成的订单id
		String orderIdDelay = contexts.getOrderId();

		//2.发送一个包含订单id的延迟消息
		boolean result = producer.SendDelayOrderMessage(orderIdDelay);
		System.out.println("发送消息的handler："+result);
		return result;
	}
}